home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / pc / CONTRSRC.ZIP / SRC / SAM / UNLI7.ASM < prev    next >
Encoding:
Assembly Source File  |  1994-11-20  |  20.4 KB  |  868 lines

  1. ;*******************************************
  2. ;* Unlimited Sprites by SAM / TFL-TDV 1994 *
  3. ;*******************************************
  4.  
  5. include video.inc ; pour les modes video
  6. include pdfik.inc ; pour decompacter l'img ...
  7. include playinfo.inc ; player
  8. include keyboard.inc
  9.  
  10.  
  11. .386
  12.  
  13.  
  14. DGROUP GROUP _DATA, _BSS
  15.  
  16. unlimit SEGMENT DWORD PUBLIC USE16 'CODE'
  17.         ASSUME CS:unlimit,DS:_SAMDATA,FS:DGROUP
  18. unlimit ENDS
  19.  
  20. _DATA SEGMENT DWORD PUBLIC USE16 'DATA'
  21. _DATA ENDS
  22.  
  23. _BSS SEGMENT DWORD PUBLIC USE16 'BSS'
  24. _BSS ENDS
  25.  
  26. _SAMDATA SEGMENT DWORD PRIVATE USE16 'FAR_DATA'
  27. _SAMDATA ENDS
  28.  
  29.  
  30. _BSS SEGMENT
  31.  
  32. EXTRN _FrameCounter     : WORD
  33. EXTRN _SpaceBar         : WORD
  34. EXTRN _MichFlag         : WORD
  35. EXTRN _ExitDemo         : WORD
  36. EXTRN _CPUtime          : WORD
  37. EXTRN _StartAdr         : WORD
  38. EXTRN _WorkAdr          : WORD
  39. EXTRN _NextAdr          : WORD
  40. EXTRN _Triple           : WORD
  41. EXTRN _SyncFlag         : WORD
  42. EXTRN _ShiftOfs         : WORD
  43. ;!!!!!!!!!! synchro avec music !!!!!!!!!!!!
  44. EXTRN _MP               : DWORD ; extern ModulePlayer * MB
  45. EXTRN _ReplayInfo       : mpInformation
  46.  
  47. EXTRN _TmpPal           : BYTE
  48. EXTRN _FadeON           : WORD
  49.  
  50.  
  51. ;---- param pour synchro avec zizik ----
  52. EVEN
  53. DebSong  WORD ?
  54. FinSong  WORD ?
  55.  
  56. _BSS ENDS
  57.  
  58.  
  59. _DATA SEGMENT
  60.  
  61. EXTRN _Datafile  : BYTE
  62. EXTRN _OfsinDta  : DWORD
  63. Picture BYTE 'rip2_img.raw',0
  64. Pictureparam PARAM_STRUC <2,DGROUP,OFFSET _Datafile,OFFSET Picture,0,0,0,,,0>
  65.  
  66. EXTRN _BlackPal: BYTE
  67. EXTRN _WhitePal: BYTE
  68.  
  69.  
  70. _DATA ENDS
  71.  
  72.  
  73. _SAMDATA SEGMENT
  74.  
  75. Palette LABEL BYTE
  76. INCLUDE cac_4848.pal
  77.  
  78. Cacodemon00 LABEL BYTE
  79. INCLUDE cac_4848.nd0 ; data non nul !!!
  80.  
  81. Cacodemon10 LABEL BYTE
  82. INCLUDE cac_4848.nd1 ; data non nul !!!
  83.  
  84. Cacodemon20 LABEL BYTE
  85. INCLUDE cac_4848.nd2 ; data non nul !!!
  86.  
  87. Cacodemon30 LABEL BYTE
  88. INCLUDE cac_4848.nd3 ; data non nul !!!
  89.  
  90.  
  91.  
  92. Cacodemon01 LABEL BYTE
  93. INCLUDE cac_4948.nd0 ; data non nul !!!
  94.  
  95. Cacodemon11 LABEL BYTE
  96. INCLUDE cac_4948.nd1 ; data non nul !!!
  97.  
  98. Cacodemon21 LABEL BYTE
  99. INCLUDE cac_4948.nd2 ; data non nul !!!
  100.  
  101. Cacodemon31 LABEL BYTE
  102. INCLUDE cac_4948.nd3 ; data non nul !!!
  103.  
  104.  
  105.  
  106.  
  107. Cacodemon02 LABEL BYTE
  108. INCLUDE cac_5048.nd0 ; data non nul !!!
  109.  
  110. Cacodemon12 LABEL BYTE
  111. INCLUDE cac_5048.nd1 ; data non nul !!!
  112.  
  113. Cacodemon22 LABEL BYTE
  114. INCLUDE cac_5048.nd2 ; data non nul !!!
  115.  
  116. Cacodemon32 LABEL BYTE
  117. INCLUDE cac_5048.nd3 ; data non nul !!!
  118.  
  119.  
  120.  
  121.  
  122. Cacodemon03 LABEL BYTE
  123. INCLUDE cac_5148.nd0 ; data non nul !!!
  124.  
  125. Cacodemon13 LABEL BYTE
  126. INCLUDE cac_5148.nd1 ; data non nul !!!
  127.  
  128. Cacodemon23 LABEL BYTE
  129. INCLUDE cac_5148.nd2 ; data non nul !!!
  130.  
  131. Cacodemon33 LABEL BYTE
  132. INCLUDE cac_5148.nd3 ; data non nul !!!
  133.  
  134. Lissajou LABEL WORD
  135. INCLUDE lissajo3.dat
  136.  
  137. Coord DW Lissajou
  138. MaxCoord EQU $-2 ; adr derniere donnee !!!
  139.  
  140. ActPage DW 0
  141. SmallTable DW 0A000h,0A400h,0A800h,0AC00h ;; sont-ce les adr des pages ??? suspense !
  142.  
  143. PictureSeg DW ? ; enfin une donne non init !!!
  144.  
  145. Timeleft  WORD ?        ; temps restant pour execution
  146. FadeFlag WORD ?        ; flag pour fading
  147. FadePtr1 WORD 2 DUP(?) ; ptr sur palette a fader
  148. FadePtr2 WORD 2 DUP(?)
  149. Delai    WORD ?
  150. Termine DW 0
  151.  
  152. ProcTbl LABEL WORD
  153. DW PutSprite0
  154. DW PutSprite1
  155. DW PutSprite2
  156. DW PutSprite3
  157.  
  158. _SAMDATA ENDS
  159.  
  160.  
  161. MPUSH   MACRO reg1:REQ,reg2:VARARG   ;; Vive Y.Roggeman/Greg & ses Macros
  162.         push reg1                    ;; recursives !!!!!!! yahouuuuu !!!
  163.         IFNB <reg2>
  164.         MPUSH reg2
  165.         ENDIF
  166.         ENDM
  167.  
  168. MPOP    MACRO reg1:REQ,reg2:VARARG   ;; bis bis !!!
  169.         IFNB <reg2>                  ;; type brol = record....
  170.         MPOP reg2                    ;; donc ça fait 20 bytes !!!
  171.         ENDIF                        ;; donc 1 word ....
  172.         pop reg1                     ;; brol je dis struct !!!
  173.         ENDM
  174.  
  175.  
  176. SetPage       MACRO
  177.  
  178.               MOV DX,3D4h
  179.               MOV AX,actpage ;; 0,1,2 ou 3 cnf bible v3220pa.asm
  180.               MOV CL,2
  181.               ROR AL,CL
  182.               MOV AH,0Ch ;; offset high
  183.               XCHG AL,AH ;; ou AH,AL :)
  184.               OUT DX,AX
  185. ENDM
  186.  
  187. SHOWTIME MACRO col
  188.         LOCAL lbl1
  189.         test            fs:_CPUtime,1
  190.         jz              lbl1
  191.         COLOR           col
  192. lbl1:
  193.  
  194. ENDM
  195.  
  196.  
  197. unlimit SEGMENT
  198. PUBLIC _MyPart
  199. EXTRN _WaitVBL:FAR
  200. EXTRN _AveragePAL:FAR
  201.  
  202.  
  203. LOOPUNTILKEY MACRO lbl
  204.          LOCAL   lbl1,lbl2,lbl3
  205.  
  206.          in      al,60h              ; EXIT ?
  207.          cmp     al,78               ; '+'
  208.          jne     lbl1
  209.          mov     fs:_CPUtime,1       ; set CPUtime Flag to ON ....
  210.          jmp     lbl
  211. lbl1:    cmp     al,74               ; '-'
  212.          jne     lbl2
  213.          mov     fs:_CPUtime,0       ; set CPUtime Flag to OFF ....
  214.          jmp     lbl
  215. lbl2:    cmp     al,39h              ; Space Bar ...
  216.          jne     lbl3
  217.          mov     fs:_SpaceBar,1
  218.          jmp     fin
  219.  
  220. lbl3:
  221.          cmp     al,1                ; Escapff...
  222.          jne     lbl
  223.          mov     fs:_ExitDemo,1      ; exit the whole demo !!!!
  224.  
  225. ENDM
  226.  
  227. ;; avant appel macro on a DS = _samdata ; ES = page ecran ; FS = DGROUP
  228. FADEPAL MACRO
  229.         LOCAL NewFade,Faddi,lbl1
  230. ;===================== Fade Palette ===========================
  231.  
  232. ;;;;;;;;;; plante pas !!!!!!
  233.  
  234.          cmp     FadeFlag,255
  235.          jb      NewFade
  236.  
  237.          mov     fs:_FadeON,0  ; plus fader ...
  238.  
  239.          cmp     Termine,1    ; Terminer si dernier fade fini
  240.          je      fin
  241.  
  242.          mov     fs:_FadeON,0    ; don't set _TmpPal anymore ...
  243.          jmp     lbl1
  244. NewFade: MPUSH   ax,cx
  245.          mov     ax,FadeFlag  ; average Black-MyPal
  246.          push    ax
  247.          push    fs
  248.          push    OFFSET _TmpPal
  249.          mov     ax,FadePtr1+2
  250.          push    ax         
  251.          mov     ax,FadePtr1
  252.          push    ax
  253.          mov     ax,FadePtr2+2 
  254.          push    ax
  255.          mov     ax,FadePtr2
  256.          push    ax
  257.          call    _AveragePAL
  258.          add     sp,7*2
  259.          mov     fs:_FadeON,1 ;1            ; set new PAL during next VR !!!!
  260.          mov     cx,fs:_FrameCounter
  261.          sub     cx,Delai             ; temps chargement
  262.          mov     Delai,0              ; plus delai ....
  263.          test    cx,cx
  264.          jnz     Faddi
  265.          mov     cx,1
  266. Faddi:   add     FadeFlag,6 ;4           ; inc fade ..
  267.          dec     cx
  268.          jnz     Faddi
  269.          MPOP    ax,cx
  270. lbl1:
  271.  
  272. ;;;;;;; plante pas !!!!!!
  273.  
  274. ;==============================================================
  275. ENDM
  276.  
  277.  
  278. _MyPart PROC FAR ; en entree debpos,debrow,finpos,finrow
  279.  
  280.               PUSH BP ; cadre de pile
  281.               MOV BP,SP
  282.  
  283.               PUSHAD ; save all reg
  284.               MPUSH GS,FS,ES,DS
  285.  
  286.               MOV AX,DGROUP
  287.               MOV FS,AX ; init FS !!!
  288.  
  289.               MOV AX,_SAMDATA
  290.               MOV DS,AX
  291.  
  292.               MOV WORD PTR FS:_MichFlag,1 ; TRUE
  293.               MOV FadeFlag,255
  294.               MOV WORD PTR _FadeOn,0
  295.  
  296.               mov dx,3d4h
  297.               mov ax,000ch
  298.               out dx,ax
  299.               mov ax,000dh   ; set page to 0
  300.               out dx,ax 
  301.  
  302.          mov     FadePtr1,OFFSET _BlackPal  ; Black to pic for the beginning !!!
  303.          mov     ax,fs
  304.          mov     FadePtr1+2,ax
  305.          mov     FadePtr2,OFFSET palette
  306.          MOV     AX,DS
  307.          MOV     FadePtr2+2,AX
  308.  
  309. ; ------------------------------------------
  310. ; recup les param sur le stack ... debut-fin
  311. ; ------------------------------------------
  312.  
  313.          mov     ax,WORD PTR ss:[bp+6]  ; debut pos
  314.          shl     eax,14
  315.          or      ax,WORD PTR ss:[bp+8]  ; debut row
  316.          or      ah,al
  317.          shr     eax,8
  318.          mov     DebSong,ax
  319.          mov     ax,WORD PTR ss:[bp+10] ; fin pos
  320.          shl     eax,14
  321.          or      ax,WORD PTR ss:[bp+12] ; fin row
  322.          or      ah,al
  323.          shr     eax,8
  324.          mov     FinSong,ax
  325.  
  326. ; -----------------
  327. ; wait the begining
  328. ; -----------------
  329.  
  330. ; XCHG FS,DS
  331.  
  332.         pushad
  333.         MPUSH   ds,es,fs,gs
  334.  
  335.         ASSUME  ds:DGROUP
  336.         ASSUME  fs:_SAMDATA
  337.         mov     ax,DGROUP
  338.         mov     ds,ax
  339.         mov     ax,_SAMDATA   ; XCHG DS,FS !!!!
  340.         mov     fs,ax
  341.  
  342. WaitPos:     mov     _ReplayInfo.numChannels,4 ; 4 voices
  343.  
  344.          les     bx,DWORD PTR[_MP]
  345.          push    ds
  346.          push    OFFSET _ReplayInfo
  347.  
  348.          ; _MP->GetInformation(&ReplayInfo)
  349.  
  350.          call    (ModulePlayer PTR es:[bx]).GetInformation
  351.          add     sp,4
  352.  
  353.          mov     ax,_ReplayInfo.pos
  354.          shl     eax,14
  355.          or      ax,_ReplayInfo.row
  356.          or      ah,al
  357.          shr     eax,8
  358.          cmp     ax,WORD PTR[DebSong]   ; is it time ????
  359.          jb      WaitPos
  360.  
  361.          ASSUME  ds:_SAMDATA
  362.          ASSUME  fs:DGROUP
  363.          MPOP    ds,es,fs,gs
  364.          popad
  365.          nop
  366.  
  367. ; set video mode
  368.  
  369.       push ds
  370.       push m320x200x256p
  371.       call _SetVga
  372.       add sp,2
  373.       pop ds
  374.  
  375. ; clear video memory
  376.  
  377.               mov dx,3C4h ;; sequenceur
  378.               mov al,2
  379.               out dx,al
  380.               inc dx
  381.               mov al,00001111b
  382.               out dx,al
  383.  
  384.        mov   ax,0A000h                 ;Remplit les quatre plans de bits
  385.                                        ;avec le code couleur 00h et efface
  386.        mov   es,ax                                        ;ainsi l'écran
  387.        xor   ax,ax
  388.        mov   cx,8000h
  389.        rep   stosw
  390.  
  391.  
  392. ; poker la palette
  393.  
  394.               MOV DX,3C8h
  395.               XOR AL,AL
  396.               OUT DX,AL
  397.               INC DX
  398.               MOV SI,OFFSET Palette ; attention à DS
  399.               CLD
  400.               MOV CX,256*3
  401.               REP OUTSB
  402.  
  403. ; decruncher img ...
  404.  
  405.          PUSH DS
  406.  
  407.          mov     eax,DWORD PTR FS:[_OfsinDta]         ; OFFSET in Datafile
  408.          mov     DWORD PTR FS:[Pictureparam.OfsInPdf],eax
  409.          mov     ax,DGROUP             ; prepare for PDFIK call
  410.  
  411.          mov     es,ax
  412.          mov     bx,OFFSET Pictureparam
  413.          pusha
  414.          call    PDFIK_ASM             ; call function 2 (extract+alloc)
  415.          popa
  416.  
  417.          POP DS
  418.  
  419.          MOV BP,OFFSET SmallTable ; via ds
  420.  
  421.          mov     ax,FS:Pictureparam.BufSeg ; where is the file in mem ?
  422.          MOV     PictureSeg,AX
  423.  
  424. ; poker le fond ...
  425.               CALL _WaitVBL
  426. ; plan 0
  427.               push ds
  428.               pop gs ; copie DS pour acceder smalltable
  429.  
  430.               mov ax,PictureSeg
  431.               mov DS,ax
  432.  
  433.               mov dx,3C4h ; sequenceur
  434.               mov al,2
  435.               out dx,al
  436.               inc dx
  437.               mov al,1 ; only plan 0
  438.               out dx,al
  439.  
  440.               MOV CX,4
  441.               MOV BX,BP
  442.  
  443. FillAllPage0: XOR SI,SI
  444.               XOR DI,DI
  445.               MOV AX,GS:[BX] ; BX ptr vers smalltable
  446.               MOV ES,AX
  447.  
  448.               PUSH CX
  449.               MOV CX,16000
  450.  
  451. FillPlan0:    MOVSB
  452.               ADD SI,3
  453.               LOOP FillPlan0
  454.  
  455.               POP CX
  456.               ADD BX,2 ; pas 1 :) table de word
  457.               LOOP FillAllPage0
  458.  
  459.               CALL _WaitVBL
  460. ; plan 1
  461.               mov dx,3C4h ; sequenceur
  462.               mov al,2
  463.               out dx,al
  464.               inc dx
  465.               mov al,2 ; only plan 1
  466.               out dx,al
  467.  
  468.               MOV CX,4
  469.               MOV BX,BP
  470.  
  471. FillAllPage1: MOV SI,1
  472.               XOR DI,DI
  473.               MOV AX,GS:[BX]
  474.               MOV ES,AX
  475.  
  476.               PUSH CX
  477.               MOV CX,16000
  478.  
  479. FillPlan1:    MOVSB
  480.               ADD SI,3
  481.               LOOP FillPlan1
  482.  
  483.               POP CX
  484.               ADD BX,2 ; pas 1 :) table de word
  485.               LOOP FillAllPage1
  486.  
  487.               CALL _WaitVBL
  488. ; plan 2
  489.               mov dx,3C4h ; sequenceur
  490.               mov al,2
  491.               out dx,al
  492.               inc dx
  493.               mov al,4 ; only plan 2
  494.               out dx,al
  495.  
  496.               MOV CX,4
  497.               MOV BX,BP
  498.  
  499. FillAllPage2: MOV SI,2
  500.               XOR DI,DI
  501.               MOV AX,GS:[BX]
  502.               MOV ES,AX
  503.  
  504.               PUSH CX
  505.               MOV CX,16000
  506.  
  507. FillPlan2:    MOVSB
  508.               ADD SI,3
  509.               LOOP FillPlan2
  510.  
  511.               POP CX
  512.               ADD BX,2 ; pas 1 :) table de word
  513.               LOOP FillAllPage2
  514.  
  515.               CALL _WaitVBL
  516. ; plan 3
  517.               mov dx,3C4h ; sequenceur
  518.               mov al,2
  519.               out dx,al
  520.               inc dx
  521.               mov al,8 ; only plan 3
  522.               out dx,al
  523.  
  524.               MOV CX,4
  525.               MOV BX,BP ; grrrr
  526.  
  527. FillAllPage3: MOV SI,3
  528.               XOR DI,DI
  529.               MOV AX,GS:[BX]
  530.               MOV ES,AX
  531.  
  532.               PUSH CX
  533.               MOV CX,16000
  534.  
  535. FillPlan3:    MOVSB
  536.               ADD SI,3
  537.               LOOP FillPlan3
  538.  
  539.               POP CX
  540.               ADD BX,2 ; pas 1 :) table de word
  541.               LOOP FillAllPage3
  542.  
  543.               PUSH GS
  544.               POP DS ; recupere ds
  545.  
  546. ; affiche le sprite !!!
  547.  
  548. Demo:         MOV BX,Coord ; Coord = adr !!!
  549.               MOV DI,[BX]
  550.               ADD BX,2
  551.               CMP BX,MaxCoord
  552.               JB Okkk
  553.               MOV Coord,OFFSET Lissajou
  554.               JMP Newpage
  555. Okkk:         MOV Coord,BX
  556.  
  557. Newpage:      MOV BX,ActPage
  558.               SHL BX,1 ; bugggggggggggggggggg stupiiiiiiiiiiiiiiiiiiiiide
  559.               MOV ES,[BX+SmallTable]
  560.               INC ActPage
  561.               AND ActPage,3 ; 000...00011b
  562.  
  563.               SetPage
  564.               
  565. Cool:         CMP WORD PTR FS:_FrameCounter,3
  566.               JB Cool
  567.               MOV WORD PTR FS:_FrameCounter,0
  568.  
  569.               MOV BX,DI
  570.               SHR DI,1
  571.               SHR DI,1
  572.               AND BX,3 ; 000...00011b
  573.               SHL BX,1
  574.  
  575.               SHOWTIME 32
  576.               CALL [BX+ProcTbl]
  577.               SHOWTIME 0
  578.  
  579.  
  580. ;; ici DS = _samdata ; ES = page ecran ; FS = DGROUP
  581.  
  582.               FadePal
  583.  
  584.          pushad
  585.          MPUSH    ds,es,fs,gs
  586.  
  587. ;==============================================
  588.          mov      ax,DGROUP
  589.          mov      ds,ax                   ; xchg FS,DS
  590.          mov      ax,_SAMDATA
  591.          mov      fs,ax
  592.  
  593.          ASSUME   ds:DGROUP,fs:_SAMDATA
  594.  
  595. ;----------- test if we must finish ... ----------
  596.  
  597.          mov     _ReplayInfo.numChannels,4 ; 4 voices
  598.  
  599.          les     bx,DWORD PTR[_MP]
  600.          push    ds
  601.          push    OFFSET _ReplayInfo
  602.  
  603.          ; _MP->GetInformation(&ReplayInfo)
  604.  
  605.          call    (ModulePlayer PTR es:[bx]).GetInformation
  606.          add     sp,4
  607.  
  608.          mov     ax,_ReplayInfo.pos
  609.          shl     eax,14
  610.          or      ax,_ReplayInfo.row
  611.          or      ah,al
  612.          shr     eax,8
  613.          cmp     ax,WORD PTR [FinSong] ; is it time ????
  614.          jb      @F                      ; to fade off ???
  615.  
  616.          mov     word ptr fs:Termine,1
  617.  
  618.          cmp     FadePtr2,OFFSET _BlackPal
  619.          je      @F
  620.          mov     fs:FadeFlag,0
  621.          mov     eax,DWORD PTR fs:[FadePtr2]
  622.          mov     DWORD PTR fs:[FadePtr1],eax   ; fade to black !!!!
  623.          mov     ax,ds
  624.          mov     fs:FadePtr2+2,ax
  625.          mov     fs:FadePtr2,OFFSET _BlackPal
  626.  
  627. @@:      
  628.          ASSUME  ds:_SAMDATA, fs:DGROUP
  629.  
  630.          MPOP    ds,es,fs,gs
  631.          popad
  632.          nop
  633.  
  634.          LOOPUNTILKEY Demo
  635.  
  636.  
  637. Fin:
  638.  
  639.         mov     ax,40h                ; Flush keyboard buffer !!! ;-)
  640.         mov     es,ax
  641.         mov     ax,es:[001ah]
  642.         mov     es:[001ch],ax
  643.  
  644.         mov     ax,Pictureseg             ; segment to free
  645.         mov     es,ax
  646.         mov     ah,49h                ; MFREE
  647.         int     21h
  648.  
  649.               MOV WORD PTR FS:_MichFlag,0 ; FALSE
  650.  
  651.         mov     dx,3c4h
  652.         mov     ax,0f02h
  653.         out     dx,ax
  654.         xor     di,di
  655.         mov     ax,0a000h
  656.         mov     es,ax
  657.         xor     eax,eax
  658.         cld
  659.         mov     cx,16384   
  660.         rep     stosd
  661.  
  662.               MPOP GS,FS,ES,DS
  663.               POPAD
  664.               NOP
  665.  
  666.               mov sp,bp
  667.               pop bp
  668.  
  669.               retf
  670. _MyPart ENDP
  671.  
  672.  
  673. PutSprite0     PROC ;; on entry : ES:DI = OFFSET WHERE TO PUT THE SPRITE !!!
  674.  
  675.               mov dx,3C4h ;; sequenceur
  676.               mov al,2
  677.               out dx,al
  678.               inc dx
  679.               mov al,1 ;; only plan 0
  680.               out dx,al
  681.  
  682.               MOV SI,OFFSET Cacodemon00
  683.               include cac_4848.as0
  684.               SUB DI,48*80
  685.  
  686.               mov dx,3C4h ;; sequenceur
  687.               mov al,2
  688.               out dx,al
  689.               inc dx
  690.               mov al,2 ;; only plan 1
  691.               out dx,al
  692.  
  693.               MOV SI,OFFSET Cacodemon10
  694.               include cac_4848.as1
  695.               SUB DI,48*80
  696.  
  697.               mov dx,3C4h ;; sequenceur
  698.               mov al,2
  699.               out dx,al
  700.               inc dx
  701.               mov al,4 ;; only plan 2
  702.               out dx,al
  703.  
  704.               MOV SI,OFFSET Cacodemon20
  705.               include cac_4848.as2
  706.               SUB DI,48*80
  707.  
  708.               mov dx,3C4h ;; sequenceur
  709.               mov al,2
  710.               out dx,al
  711.               inc dx
  712.               mov al,8 ;; only plan 3
  713.               out dx,al
  714.  
  715.               MOV SI,OFFSET Cacodemon30
  716.               include cac_4848.as3
  717.  
  718.               RET
  719. PutSprite0 ENDP
  720.  
  721.  
  722. PutSprite1     PROC ;; on entry : ES:DI = OFFSET WHERE TO PUT THE SPRITE !!!
  723.  
  724.               mov dx,3C4h ;; sequenceur
  725.               mov al,2
  726.               out dx,al
  727.               inc dx
  728.               mov al,1
  729.               out dx,al
  730.  
  731.               MOV SI,OFFSET Cacodemon01
  732.               include cac_4948.as0
  733.               SUB DI,48*80
  734.  
  735.               mov dx,3C4h ;; sequenceur
  736.               mov al,2
  737.               out dx,al
  738.               inc dx
  739.               mov al,2
  740.               out dx,al
  741.  
  742.               MOV SI,OFFSET Cacodemon11
  743.               include cac_4948.as1
  744.               SUB DI,48*80
  745.  
  746.               mov dx,3C4h ;; sequenceur
  747.               mov al,2
  748.               out dx,al
  749.               inc dx
  750.               mov al,4
  751.               out dx,al
  752.  
  753.               MOV SI,OFFSET Cacodemon21
  754.               include cac_4948.as2
  755.               SUB DI,48*80
  756.  
  757.               mov dx,3C4h ;; sequenceur
  758.               mov al,2
  759.               out dx,al
  760.               inc dx
  761.               mov al,8
  762.               out dx,al
  763.  
  764.               MOV SI,OFFSET Cacodemon31
  765.               include cac_4948.as3
  766.  
  767.               RET
  768. PutSprite1 ENDP
  769.  
  770. PutSprite2     PROC ;; on entry : ES:DI = OFFSET WHERE TO PUT THE SPRITE !!!
  771.  
  772.               mov dx,3C4h ;; sequenceur
  773.               mov al,2
  774.               out dx,al
  775.               inc dx
  776.               mov al,1
  777.               out dx,al
  778.  
  779.               MOV SI,OFFSET Cacodemon02
  780.               include cac_5048.as0
  781.               SUB DI,48*80
  782.  
  783.               mov dx,3C4h ;; sequenceur
  784.               mov al,2
  785.               out dx,al
  786.               inc dx
  787.               mov al,2
  788.               out dx,al
  789.  
  790.               MOV SI,OFFSET Cacodemon12
  791.               include cac_5048.as1
  792.               SUB DI,48*80
  793.  
  794.               mov dx,3C4h ;; sequenceur
  795.               mov al,2
  796.               out dx,al
  797.               inc dx
  798.               mov al,4
  799.               out dx,al
  800.  
  801.               MOV SI,OFFSET Cacodemon22
  802.               include cac_5048.as2
  803.               SUB DI,48*80
  804.  
  805.               mov dx,3C4h ;; sequenceur
  806.               mov al,2
  807.               out dx,al
  808.               inc dx
  809.               mov al,8
  810.               out dx,al
  811.  
  812.               MOV SI,OFFSET Cacodemon32
  813.               include cac_5048.as3
  814.  
  815.               RET
  816. PutSprite2 ENDP
  817.  
  818. PutSprite3     PROC ;; on entry : ES:DI = OFFSET WHERE TO PUT THE SPRITE !!!
  819.  
  820.               mov dx,3C4h ;; sequenceur
  821.               mov al,2
  822.               out dx,al
  823.               inc dx
  824.               mov al,1
  825.               out dx,al
  826.  
  827.               MOV SI,OFFSET Cacodemon03
  828.               include cac_5148.as0
  829.               SUB DI,48*80
  830.  
  831.               mov dx,3C4h ;; sequenceur
  832.               mov al,2
  833.               out dx,al
  834.               inc dx
  835.               mov al,2
  836.               out dx,al
  837.  
  838.               MOV SI,OFFSET Cacodemon13
  839.               include cac_5148.as1
  840.               SUB DI,48*80
  841.  
  842.               mov dx,3C4h ;; sequenceur
  843.               mov al,2
  844.               out dx,al
  845.               inc dx
  846.               mov al,4
  847.               out dx,al
  848.  
  849.               MOV SI,OFFSET Cacodemon23
  850.               include cac_5148.as2
  851.               SUB DI,48*80
  852.  
  853.               mov dx,3C4h ;; sequenceur
  854.               mov al,2
  855.               out dx,al
  856.               inc dx
  857.               mov al,8
  858.               out dx,al
  859.  
  860.               MOV SI,OFFSET Cacodemon33
  861.               include cac_5148.as3
  862.  
  863.               RET
  864. PutSprite3 ENDP
  865.  
  866. unlimit       ENDS
  867.               END
  868.